package com.atguigu.jedis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author WEIYUNHUI
 * @date 2023/6/29 10:47
 *
 * 编程套路:
 *   1. 获取连接对象 Jedis
 *   2. 调用提供好的API进行操作
 *   3. 关闭连接
 *
 */
public class JedisDemo {
    public static void main(String[] args) {

        /*
        Jedis jedis = getJedis();
        Jedis jedis = getJedisFromPool();

        String pong = jedis.ping();
        System.out.println(pong);

        jedis.close();
        */

        testString();
    }

    /*
       作业： 每种类型至少测试5个方法。
     */
    public static void testString(){
        Jedis jedis = getJedisFromPool();
        //调用api方法
        //方法名同命令名。
        jedis.set("username" , "zhangsan") ;
        System.out.println(jedis.get("username"));
        jedis.close();
    }

    public static void testList(){}
    public static void testSet(){}
    public static void testZset(){}
    public static void testHash(){}





    public static String host = "hadoop102" ;
    public static int port = 6379 ;
    /**
     * 直接创建Jedis
     */
    public static Jedis getJedis(){
        Jedis jedis = new Jedis(host, port);
        return jedis ;
    }


    public static JedisPool jedisPool = null ;
    /**
     * 基于连接池获取Jedis
     * @return
     */
    public static Jedis getJedisFromPool(){
        if(jedisPool == null) {
            //创建连接池
            //主要配置
            JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(10); //最大可用连接数
            jedisPoolConfig.setMaxIdle(5); //最大闲置连接数
            jedisPoolConfig.setMinIdle(5); //最小闲置连接数
            jedisPoolConfig.setBlockWhenExhausted(true); //连接耗尽是否等待
            jedisPoolConfig.setMaxWaitMillis(2000); //等待时间
            jedisPoolConfig.setTestOnBorrow(true); //取连接的时候进行一下测试 ping pong

            jedisPool = new JedisPool( jedisPoolConfig , host ,port );
        }
        //从池中获取连接
        return jedisPool.getResource();
    }
}
